/*
srkrt_method.h
Ce fichier contient les protoypes des diverses fonctions utilisé pour manipuler la structure Surakarta.
En principe, il faudrait toujours modifier les instances de Surakarta avec ces fonctions.
*/

#ifndef INCLUDE_SRKRT_METHOD
#define INCLUDE_SRKRT_METHOD

#include <stdbool.h>
#include "srkrt_main_struct.h"

/* Macros utile au changement de direction dans les boucles, lors de la recherche des coup possibles*/
#define UP      0
#define DOWN    1
#define LEFT    2
#define RIGHT   3

/*****************/
/* CONSTRUCTEURS */
/*****************/
/* cree la structure Surakarta */
Surakarta srkrt_create(int turn) ;

/* joue le coup action */
void srkrt_play(Surakarta* game, Move action) ;

/* cree un Move a partir des valeurs passees en parametres*/
Move move_create(int,int,int,int,bool) ;

/******************************************************************/

/***************/
/* Projecteurs */
/***************/

/* liste tous les mouvements possibles pour le jouer game->toPlay */
void srkrt_allowed_moves(Surakarta* game, List *list) ;

/* deplace le pion Move d'une case vers sens */
void srkrt_one_square_move(int* sens, Move* move, int* loopNumber) ;

/* calcul le point d'arrivee lorsq'un pion etre dans une boucle */
void srkrt_loop_arrived(Move* move, int* sens) ;

/* lance le pion dans la direction sens jusqu'a trouver un point d'arret */
void srkrt_launch_pawn(Surakarta* game, Move* move, int sens, bool* captureIsPossible) ;

/* renvoie true si action est contenu dans la liste, false sinon */
bool srkrt_is_allowed(Surakarta* game, Move action) ;

/* annule le dernier coup joue */
void srkrt_take_back(Surakarta* game) ;

/*sauvergarde la partie dans le fichier name
path est le chemin absolue du fichier
retourne EXIT_SUCCESS en cas de succes
EXIT_FAILURE en cas d'echec
*/
int srkrt_save(Surakarta* game, char* path);

/* charge la partie name 
path est le chemin ABSOLUE du fichier
*/
int srkrt_load(Surakarta* game, char* path);

#endif
